#include "hal.h"


lv_display_t * sdl_hal_init(int32_t w, int32_t h)
{
// ✅ 创建输入组lv_group并设置为默认输入组（方便焦点与键盘控制）
  lv_group_set_default(lv_group_create());

// ✅ 创建一个宽w、高h的SDL窗口（显示设备）作为显示输出，返回一个 lv_display_t *，即 LVGL 的显示对象
// lv_display_t内部自动创建一个默认屏幕对象default_scr，此时调用lv_scr_act()方法会返回该default_scr
// 直到调用lv_scr_load(screen2)即切换屏幕为screen2替换掉原来的，
// 这时lv_display_t的当前活动屏幕变为screen2，lv_scr_act()方法返回screen2
  lv_display_t * disp = lv_sdl_window_create(w, h);

// ✅ 创建并注册输入设备（鼠标、键盘、滚轮）
  lv_indev_t * mouse = lv_sdl_mouse_create();//创建一个鼠标输入设备（SDL 捕获鼠标事件）
  lv_indev_set_group(mouse, lv_group_get_default());//设置mouse属于默认输入组
  lv_indev_set_display(mouse, disp);//设置mouse对应的显示窗口
  /*Declare the image file.*/
//   ✅ 给鼠标加上一个光标图片
  LV_IMAGE_DECLARE(mouse_cursor_icon);//声明一个鼠标图片资源mouse_cursor_icon.c文件中LV_IMAGE_DECLARE()的图像
  /*Create an image object for the cursor */
  //在当前屏幕上创建一个lv_image对象作为光标
  lv_obj_t * cursor_obj = lv_image_create(lv_screen_active());
  /*Set the image source*/
  lv_image_set_src(cursor_obj, &mouse_cursor_icon);

  //将该图片绑定到鼠标输入设备上，这样在模拟器中移动鼠标时，会看到一个自定义的鼠标指针
  /*Connect the image  object to the driver*/
  lv_indev_set_cursor(mouse, cursor_obj);

  //创建鼠标滚轮输入设备mousewheel
  lv_indev_t * mousewheel = lv_sdl_mousewheel_create();
  //设置mousewheel对应的显示窗口
  lv_indev_set_display(mousewheel, disp);
  //设置mousewheel属于默认输入组
  lv_indev_set_group(mousewheel, lv_group_get_default());

  //创建键盘输入设备kb
  lv_indev_t * kb = lv_sdl_keyboard_create();
  //设置kb对应的显示窗口
  lv_indev_set_display(kb, disp);
  //设置kb属于默认输入组
  lv_indev_set_group(kb, lv_group_get_default());

  //设置默认显示即主显示设备（主屏幕），后续创建的对象默认都会出现在这个显示上
  lv_display_set_default(disp);

  return disp;
}
